JSaber = {
	maxItem : 5,
	// 主控制器地址
	uri : serverUrl + '$/handler',
	suffixUri : '$/handler',
	// 分页大小
	pageSize : 50,
	// 字段
	fields : {},
	// 转换json 需第三方实现
	toJson : function(o) {
	},
	// json转换对象 需第三方实现
	formJson : function(o) {
	},
	// ajax 的第三方实现
	ajax : function(url, params, callback, async) {
	},
	// 动作
	actions : {
		/** 删除动作 */
		deleteAction : 'deleteAction',
		/** 加载动作 */
		loadAction : 'loadAction',
		/** 保存动作 */
		saveAction : 'saveAction',
		/** 查询动作 */
		selectAction : 'selectAction',
		/** 树形动作 */
		treeAction : 'treeAction',
		/** 请求转发动作 */
		urlFlowerAction : 'urlFlowerAction',
		/** 批量处理 */
		batSaveAction : 'batSaveAction'
	},
	tree : {
		// 树形选择框类型
		checkedType : {
			no : 'no',
			all : 'all',
			parent : 'parent',
			children : 'children'
		},
		// 树形级联类型
		treeType : {
			all : 'all', // 互相级联
			pc : 'pc',// 父节点选中子节点选中
			cp : 'cp' // 子节点选中父节点选中
		}
	},
	// 视图
	views : {
		/** 请求转发视图 */
		urlFlowerView : 'urlFlowerView',
		/** 表单视图 */
		extFormView : 'extFormView',
		/** 加载视图 */
		extLoadView : 'extLoadView',
		/** 查询视图 */
		extSelectView : 'extSelectView',
		/** 树形视图 */
		extTreeView : 'extTreeView'
	},
	// 适配
	adaptor : function(cnf) {
		return {
			$_self : cnf.startSelf,// 包含自己
			$_sqlKey : cnf.sqlKey,// 脚本键
			$_rule : JSaber.paserTrems(cnf.rule),// 规则
			$_shir : cnf.shir,// 动作拦截器
			$_treeCheckedModel : cnf.ckModel,// 树形多选框模式
			$_dataChangeter : cnf.dataChangeter,// 数据改变
			$_startId : cnf.startId,// 开始id
			$_clazz : cnf.clazz, // 所属类
			$_action : cnf.action,// 所属动作
			$_view : cnf.model,// 所属视图
			$_fields : JSaber.paserFields(cnf.fields),// 字段
			$_where : JSaber.paserTrems(cnf.where),// 查询条件
			$_order : JSaber.paserOrders(cnf.order),// 排序条件
			$_validate : JSaber.paserValidate(cnf.validate),// 验证条件
			$_mapper : cnf.mapper,// 树形映射
			$_url : cnf.url
		};
	},
	// 解析查询
	// [ ['name','=',?],['age','like',?] ]
	paserTrems : function(where) {
		if (where != null) {
			var trems = [], tager = {};
			for (var i in where) {
				var trem = {
					field : where[i][0],
					op : where[i][1],
					value : where[i][2]
				}, key = trem.field + trem.op;
				tager[key] = trem;
			}
			for (var i in tager) {
				trems.push(tager[i]);
			}
			return JSaber.toJson(trems);
		}
	},
	// 解析排序
	paserOrders : function(order) {
		if (order != null) {
			var orders = [], tager = {};
			for (var i in order) {
				var ary = order[i].split('->'), sort = {
					field : ary[0],
					type : ary[1]
				}, key = order[i];
				if (!tager[key]) {
					orders.push(sort);
				}
				tager[key] = order[i];
			}
			return JSaber.toJson(orders);
		}
	},
	// 解析验证
	paserValidate : function(validates) {
		if (validates != null) {
			var vs = [], tager = {};
			for (var i in validates) {
				var vali = {
					exp : validates[i][0],
					field : validates[i][1],
					error : validates[i][2]
				}, key = vali.exp;
				tager[key] = vali;
			}
			for (var i in tager) {
				vs.push(tager[i]);
			}
			return JSaber.toJson(vs);
		}
	},
	// 解析字段
	paserFields : function(fields) {
		if (fields != null) {
			return fields.join(',');
		}
	},
	/** jsaber adaptor适配器初始化函数 */
	init : function() {
		// 加载实体简单名称到js
		JSaber.ajax('application/allEntityClass', {}, function(result) {
					eval(result);
				}, false);
		// 加载字段中文到js
		JSaber.ajax('application/allFields', {}, function(result) {
					var data = JSaber.formJson(result);
					for (var i in data) {
						JSaber.fields[eval(i)] = data[i];
					}
				}, false);
	}
}

// 一些扩展函数和方法
/**
 * 如果为空则
 * 
 * @param {}
 *            src
 * @param {}
 *            ifNull
 * @return {}
 */
function thenNull(src, ifNull) {
	return !src ? ifNull : src;
}

/**
 * 是否为空
 * 
 * @param {}
 *            o
 * @return {}
 */
function empty(o) {
	return o == 'undefined' || o == undefined || o == null || o == '' || (o instanceof Array && o.length == 0);
}

/** 脚本池 */
var App_javascriptPool = new Object();
window.onload = function() {
	var javascriptes = document.getElementsByTagName("script");
	for (var index = 0; index < javascriptes.length; index++) {
		var strs = javascriptes[index].src.split('/');
		var name = strs[strs.length - 1];
		App_javascriptPool[name] = javascriptes[index].src;
	}
};

/** 动态加载javascript */
function adaptor_implJavaScript(url, callback) {
	var script = document.createElement('script');
	script.type = 'text/javascript';
	script.src = url;
	adaptor_bindJavascriptEvent(script, callback);
	document.body.appendChild(script);
	App_javascriptPool[url] = script.src;
}

/** 为script对象绑定回调函数 */
function adaptor_bindJavascriptEvent(script, callback) {
	script.onload = script.onreadystatechange = function() {
		if (script.readyState && script.readyState != 'loaded' && script.readyState != 'complete')
			return;
		script.onreadystatechange = script.onload = null
		if (callback)
			callback();
	}
}

/** 检查script是否存在脚本池 */
function adaptor_exitJavascript(url) {
	return App_javascriptPool[url];
}

/** 字符串相乘 */
String.prototype.times = function(n) {
	return Array.prototype.join.call({
				length : n + 1
			}, this);
};
var CLICK_TEXT;
